package org.security.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.security.enums.CustomExceptionType;
import org.security.exception.CustomException;

/**
 * @author jt
 * @date 2024/7/21 0:41
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AjaxResult {

//    private boolean isok; //请求是否处理成功 true或者false
    private int code; //请求响应状态码 使用http状态码 比如：200请求成功，400用户输入错误导致的异常，500系统内部异常
    private String message;  //请求结果描述信息
    private Object data; //请求结果数据（通常用于查询操作）

    //请求出现异常时的响应数据封装
    public static AjaxResult error(CustomException e) {
        AjaxResult resultBean = new AjaxResult();
//        resultBean.setIsok(false);
        resultBean.setCode(e.getCode());
        if (e.getCode() == CustomExceptionType.USER_INPUT_ERROR.getCode()) {
            resultBean.setMessage(e.getMessage());
        } else if (e.getCode() == CustomExceptionType.SYSTEM_ERROR.getCode()) {
            resultBean.setMessage(e.getMessage() + ",请将该异常信息发送给管理员!");
        } else {
            resultBean.setMessage("系统出现未知异常，请联系管理员!");
        }
        //TODO 这里最好将异常信息持久化
        return resultBean;
    }
    //请求出现异常时的响应数据封装
    public static AjaxResult error(CustomExceptionType customExceptionType,
                                     String errorMessage) {
        AjaxResult resultBean = new AjaxResult();
//        resultBean.setIsok(false);
        resultBean.setCode(customExceptionType.getCode());
        resultBean.setMessage(errorMessage);
        return resultBean;
    }

    //请求处理成功时的数据响应
    public static AjaxResult success() {
        AjaxResult resultBean = new AjaxResult();
//        resultBean.setIsok(true);
        resultBean.setCode(200);
        resultBean.setMessage("success");
        return resultBean;
    }

    //请求处理成功，并响应结果数据
    public static AjaxResult success(Object data) {
        AjaxResult AjaxResult = success();
        AjaxResult.setData(data);
        return AjaxResult;
    }

}
